Appearance
《Java语言程序设计》期末试卷A (精选02)
注意:
(1)所有答案均写在答题纸上,写在试卷上无效; (2)试题中若出现Java源代码,则不考虑源代码的大小写错误和标点符号错误,也不考虑标点符号的中英文状态;但考生自己书写的代码需要注意大小写! (3)当题目中只有程序片段时,假设完整程序已经具有其它必要代码并导入 Java 的必需包、主类的定义、main()方法的定义等。 (4)考试结束,试卷和答题纸一起上交。
一、单选题(每题 1 分,共 15 分)
1、以下哪个不是 Java 的原始数据类型( )
- A. boolean
- B. double
- C. float
- D. Integer
查看答案与解析
答案:D
解析: Java 的 8 种原始(基本)数据类型:byte, short, int, long, float, double, char, boolean。Integer 是 int 的包装类(Wrapper Class),属于引用类型,不是原始数据类型。
难度: ⭐ 考点: #基本数据类型 #包装类
💡 学习锦囊
📖 相关公式与知识点:
- 8 种基本类型:byte, short, int, long, float, double, char, boolean。
- 包装类:Integer, Long, Double 等都是引用类型,不是原始类型。
易错点
- Integer 是引用类型,不是原始类型。原始类型是小写的 int。
🔄 举一反三
- 判断:
Long是 Java 的原始数据类型。( )查看练习答案与解析
答案:× 解析:
Long是long的包装类(引用类型),原始类型是小写的long。所有包装类(Integer, Long, Double 等)都是引用类型。
2、如下哪个字符串是 Java 中的合法标识符( )
- A. fieldname_sysValue
- B. String
- C. 3number
- D. #number
查看答案与解析
答案:A
解析:
- A:
fieldname_sysValue由字母、下划线组成,合法。✓ - B:
String是 Java 核心类名,虽然技术上不是关键字、可以作为标识符,但极不推荐,容易引起混淆。本题问"合法标识符",A 更无争议。 - C:
3number以数字开头,不合法。 - D:
#number包含#,不合法。
难度: ⭐ 考点: #标识符
💡 学习锦囊
📖 相关公式与知识点:
- 标识符规则:字母/下划线/美元符号开头,不含
#、不以数字开头。
易错点
- 标识符不能以数字开头,不能包含
#等特殊字符。
🔄 举一反三
- 判断:
$name是 Java 中合法的标识符。( )查看练习答案与解析
答案:√ 解析:
$是合法的标识符字符,可以出现在开头或中间。
3、条件运算符 ?: 是属于三元运算符,其用法为 op1 ? op2 : op3,正确的描述是( )
- A. 若操作数 op1 为真,返回 op2,否则返回 op3
- B. 若操作数 op2 为真,返回 op1,否则返回 op3
- C. 若操作数 op1 为假,返回 op2,否则返回 op3
- D. 若操作数 op1 为真,返回 op3,否则返回 op2
查看答案与解析
答案:A
解析: 三元运算符 op1 ? op2 : op3:当 op1 为 true 时返回 op2,否则返回 op3。
难度: ⭐ 考点: #三元运算符
💡 学习锦囊
📖 相关公式与知识点:
- 三元运算符:
条件 ? 表达式1 : 表达式2,条件为 true 返回表达式1,否则返回表达式2。
易错点
- 注意 op1 是条件,op2 是 true 时的返回值,op3 是 false 时的返回值。
🔄 举一反三
int x = (5 > 3) ? 10 : 20;,x 的值是多少?查看练习答案与解析
答案:10 解析:5 > 3 为 true,返回 10。
4、若整型变量 i 的值为偶数,那么值为 true 的逻辑表达式是( )
- A.
i / 2 == 0; - B.
i % 2 != 1; - C.
i % 2 == 1; - D.
i % 2 equals 0;
查看答案与解析
答案:B
解析:
- A:
i / 2 == 0是整数除法,只有 i 为 0 或 1 时才为 true,不正确。 - B:
i % 2 != 1,偶数除以 2 余 0(不等于 1),为 true。✓ - C:
i % 2 == 1,偶数除以 2 余 0(不等于 1),为 false,不正确。 - D:
equals是对象方法,不能用于 int 的比较。
难度: ⭐ 考点: #取模运算 #偶数判断
💡 学习锦囊
📖 相关公式与知识点:
- 判断偶数:
i % 2 == 0或i % 2 != 1。 - 判断奇数:
i % 2 == 1或i % 2 != 0。
易错点
i / 2 == 0不是判断偶数的正确方式(整数除法问题)。equals不能用于基本类型的比较。
🔄 举一反三
- 判断负数 -4 是否为偶数,
-4 % 2 == 0的结果是什么?查看练习答案与解析
答案:true 解析:Java 中
-4 % 2 = 0,所以-4 % 2 == 0为 true,-4 是偶数。
5、判断 char 型变量 c 为数字字符的正确表达式为( )
- A.
'9' >= c >= '0' - B.
c >= '0' && c <= '9' - C.
9 >= c || c >= 0 - D.
9 >= c >= 0
查看答案与解析
答案:B
解析:
- A:Java 不支持连续比较
'9' >= c >= '0'。 - B:
c >= '0' && c <= '9',正确判断数字字符。✓ - C:
9 >= c || c >= 0逻辑错误,用了||且比较的是数字而非字符。 - D:同 A,不支持连续比较。
难度: ⭐ 考点: #字符比较 #逻辑运算符
💡 学习锦囊
📖 相关公式与知识点:
- 数字字符范围:
'0'~'9',对应 Unicode 编码 48~57。 - Java 不支持连续比较:
a >= c >= b是非法语法。
易错点
- Java 不支持连续比较如
a >= c >= b。 - 判断字符范围必须用
&&(与),不能用||(或)。
🔄 举一反三
- 判断 char 型变量 c 为大写字母的正确表达式是什么?
查看练习答案与解析
答案:
c >= 'A' && c <= 'Z'解析:大写字母的范围是 'A'(65) ~ 'Z'(90)。
6、下列程序段:
boolean a = false, b = true;
boolean c = (a && b) && (!b);
boolean result = (a || b) && (!b);2
3
执行完后,正确的结果是( )
- A. c=false; result=false
- B. c=true; result=true
- C. c=true; result=false
- D. c=false; result=true
查看答案与解析
答案:A
解析:
a = false, b = truec = (a && b) && (!b)=(false && true) && (!true)=false && false= falseresult = (a || b) && (!b)=(false || true) && (!true)=true && false= false
因此 c=false, result=false,选 A。
难度: ⭐ 考点: #逻辑运算符 #短路求值
💡 学习锦囊
📖 相关公式与知识点:
- 逻辑运算符:
&&(与)、||(或)、!(非)。 - 短路求值:
&&遇到 false 则不再计算右边;||遇到 true 则不再计算右边。
易错点
&&和||具有短路特性,&和|没有。
🔄 举一反三
boolean x = true || (5/0 > 0);会抛出异常吗?查看练习答案与解析
答案:不会 解析:
||具有短路特性,左边 true 则不再计算右边,所以5/0不会执行。
7、对于一个三位正整数 n,表达式( )可以取出 n 的十位数字。
- A.
n % 10 / 10 - B.
n % 100 - C.
n / 10 % 10 - D.
n / 10
查看答案与解析
答案:C
解析: 以 n = 123 为例:
- A:
123 % 10 / 10=3 / 10= 0 ✗ - B:
123 % 100= 23 ✗ - C:
123 / 10 % 10=12 % 10= 2 ✓ - D:
123 / 10= 12 ✗
难度: ⭐ 考点: #取位运算
💡 学习锦囊
📖 相关公式与知识点:
- 取位运算:个位
n%10,十位n/10%10,百位n/100%10。
易错点
- 取十位是先除以 10 再取模 10,不是先取模再除。
🔄 举一反三
- 取出一个五位正整数 n 的百位数字,表达式是什么?
查看练习答案与解析
答案:
n / 100 % 10解析:以 n = 12345 为例,12345 / 100 = 123,123 % 10 = 3,即百位数字。
8、下列各语句序列中,能够将变量 u、s 中最大值赋值到变量 t 中的是( )
- A.
if (u > s) t = u; t = s; - B.
t = s; if (u > s) t = u; - C.
if (u > s) t = s; else t = u; - D.
t = u; if (u > s) t = s;
查看答案与解析
答案:B
解析:
- A:
if(u>s) t=u;后面t=s;无条件执行,t 总是等于 s。✗ - B:先
t=s,若u>s则t=u,最终 t 为较大值。✓ - C:若
u>s则t=s(错误,应赋 u),否则t=u。逻辑反了。✗ - D:先
t=u,若u>s则t=s(错误)。✗
难度: ⭐ 考点: #if语句 #求最大值
💡 学习锦囊
📖 相关公式与知识点:
- 求最大值:先假设一个值为最大,再与另一个比较,更大则更新。
易错点
- 注意 if 后面没有大括号时,只控制一条语句。
🔄 举一反三
- 用三元运算符实现
t = max(u, s)。查看练习答案与解析
答案:
t = (u > s) ? u : s;解析:如果 u > s,返回 u;否则返回 s。
9、关于方法的返回值,以下说法正确的是( )
- A. 方法必须有返回值
- B. 方法可以没有返回值,也可以有多个返回值
- C. 方法有且仅有一个返回值
- D. 方法必须有至少一个返回值
查看答案与解析
答案:C
解析: 方法要么没有返回值(void),要么有且仅有一个返回值。不能有多个返回值。
难度: ⭐ 考点: #方法 #返回值
💡 学习锦囊
📖 相关公式与知识点:
- 方法返回值:void 方法无返回值,非 void 方法必须有且仅有一个返回值。
易错点
- Java 方法不能返回多个值,如需返回多个值,可使用数组或对象封装。
🔄 举一反三
- 判断:void 方法中可以使用
return;语句。( )查看练习答案与解析
答案:√ 解析:void 方法中可以使用不带返回值的
return;来提前结束方法。
10、下面叙述正确的是( )
- A. 类就是对象,对象就是类
- B. boolean 型是一种简单数据类型
- C. 实现一个接口必需实现接口的所有方法
- D. 抽象类中的方法都是没有方法体的抽象方法
查看答案与解析
答案:C
解析:
- A 错误:类是模板,对象是实例,两者不同。
- B 错误:boolean 是基本数据类型,不是"简单数据类型"这个说法(虽然意思接近,但 C 更准确)。
- C 正确:实现接口必须实现接口中声明的所有抽象方法(除非该类是抽象类)。
- D 错误:抽象类中可以包含非抽象方法(有方法体的方法)。
难度: ⭐ 考点: #类与对象 #接口 #抽象类
💡 学习锦囊
📖 相关公式与知识点:
- 类与对象:类是模板/蓝图,对象是类的实例。
- 接口实现:实现接口必须实现所有抽象方法(除非该类本身也是抽象类)。
- 抽象类:可以包含抽象方法和非抽象方法。
易错点
- 抽象类中可以包含非抽象方法(有方法体的方法)。
🔄 举一反三
- 判断:抽象类可以实现接口但不实现接口的所有方法。( )
查看练习答案与解析
答案:√ 解析:抽象类可以实现接口,但不要求实现所有方法,未实现的方法留给具体子类实现。
11、下面哪几个方法是 public void example(){...} 的重载方法?( )
- A.
public void Example(int m){...} - B.
public int example(){...} - C.
public void example2(){...} - D.
public int example(int m, float f){...}
查看答案与解析
答案:D
解析: 重载要求方法名相同,参数列表不同。
- A:方法名
Example与example不同(大小写不同),不是重载。 - B:参数列表相同(无参数),仅返回类型不同,不是重载。
- C:方法名
example2不同,不是重载。 - D:方法名
example相同,参数为(int m, float f)与原方法()不同,是合法重载。✓
难度: ⭐ 考点: #方法重载
💡 学习锦囊
📖 相关公式与知识点:
- 方法重载:同名不同参(类型、个数、顺序),与返回类型无关。
易错点
- 方法重载只看参数列表,返回类型不同不算重载。
- Java 区分大小写,
Example和example是不同的方法名。
🔄 举一反三
- 判断:
void f(int a)和int f(int a)构成方法重载。( )查看练习答案与解析
答案:× 解析:参数列表完全相同,仅返回类型不同,不构成重载,编译报错。
12、下面叙述错误的是( )
- A. 一个类可以有多个构造方法
- B. 最终类不能派生子类,最终方法不能被覆盖
- C. 如果一个类中没有定义构造方法,则Java在生成这个类的实例时不会调用构造方法
- D. 数组一旦创建之后,就不能再改变其长度
查看答案与解析
答案:C
解析: 如果一个类中没有定义任何构造方法,Java 编译器会自动生成一个默认的无参构造方法,在创建实例时会调用它。C 说"不会调用构造方法"是错误的。
难度: ⭐ 考点: #构造方法 #默认构造方法
💡 学习锦囊
📖 相关公式与知识点:
- 默认构造方法:未定义时编译器自动生成,定义了则不生成。
易错点
- 即使没有手动定义构造方法,创建对象时也会调用编译器自动生成的默认构造方法。
🔄 举一反三
- 判断:如果一个类已经定义了一个有参构造方法,编译器还会自动生成无参构造方法吗?
查看练习答案与解析
答案:不会 解析:一旦手动定义了任何构造方法,编译器就不再自动生成默认的无参构造方法。
13、下面叙述正确的是( )
- A. Java中一个类可以同时继承多个其他类,但只能实现一个接口
- B. 框架 JFrame 作为图形用户界面的顶级容器,不可以直接放置按钮、标签等组件
- C. 类头定义包含的四个部分分别为:访问控制修饰符、类名说明、父类名说明和接口名的说明,它们中的任何一个都是不能缺少的
- D. 当浏览器暂时离开含 applet 程序的页面时,stop()方法将被执行
查看答案与解析
答案:D
解析:
- A 错误:Java 不支持类的多继承,但可以实现多个接口。
- B 错误:JFrame 可以通过
getContentPane().add()或直接add()添加组件。 - C 错误:父类名和接口名不是必须的。
- D 正确:Applet 生命周期中,离开页面时调用
stop()。
难度: ⭐ 考点: #单继承 #JFrame #Applet
💡 学习锦囊
📖 相关公式与知识点:
- Java 继承:单继承(一个类只能 extends 一个父类),多实现(可以 implements 多个接口)。
- Applet 生命周期:init() → start() → stop() → destroy()。
易错点
- Java 不支持类的多继承。
🔄 举一反三
- 判断:Java 中一个类可以实现多个接口。( )
查看练习答案与解析
答案:√ 解析:Java 支持接口的多实现,如
class A implements Interface1, Interface2 {}。
14、为了以字节方式从文件读出内容,可以使用( )类。
- A. FileReader
- B. FileInputStream
- C. FileOutputStream
- D. FileWriter
查看答案与解析
答案:B
解析:
- FileReader:字符输入流
- FileInputStream:字节输入流 ✓
- FileOutputStream:字节输出流
- FileWriter:字符输出流
难度: ⭐ 考点: #字节流 #字符流
💡 学习锦囊
📖 相关公式与知识点:
- 字节流 vs 字符流:InputStream/OutputStream(字节),Reader/Writer(字符)。
易错点
- 读取用 Input 流,写入用 Output 流。
🔄 举一反三
- 以字符方式写入文件应使用哪个类?
查看练习答案与解析
答案:FileWriter 解析:FileWriter 是字符输出流,用于以字符方式写入文件。
15、布局管理器可以管理容器中组件的( )。
- A. 大小和字体
- B. 颜色和位置
- C. 大小和位置
- D. 字体和颜色
查看答案与解析
答案:C
解析: 布局管理器负责管理容器中组件的大小和位置。常见的布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout 等。
难度: ⭐ 考点: #布局管理器
💡 学习锦囊
📖 相关公式与知识点:
- 布局管理器:管理组件的大小和位置,不管理颜色和字体。
- 常见布局:FlowLayout(流式)、BorderLayout(边界)、GridLayout(网格)、CardLayout(卡片)。
易错点
- 布局管理器只管大小和位置,不管颜色和字体。
🔄 举一反三
- JFrame 默认使用什么布局管理器?
查看练习答案与解析
答案:BorderLayout 解析:JFrame 默认使用 BorderLayout,将容器分为东、南、西、北、中五个区域。
二、程序阅读题(每题 2 分,共 24 分)
程序 1: 求 $1 + 2/3 + 3/5 + 4/7 + 5/9 + \dots$ 的前 20 项之和。
public class Exam21 {
public static void main(String args[]) {
int i = 1, b = 1;
double s;
(1) s = 0;
while ((2) i <= 20) {
(3) s = s + (double)i / b;
b = b + 2;
i++;
}
System.out.print(s);
}
}2
3
4
5
6
7
8
9
10
11
12
13
【供选择的答案】
(1) A. s = 0 B. s = 1 C. s = -1 D. s = 2
(2) A. b <= 20 B. i <= 20 C. i < 20 D. b < 20
(3) A. s = s + double(i)/double(b) B. s = s + i/b C. s += i/2*i-1 D. s += (double)i/b
查看答案与解析
答案:(1)A (2)B (3)D
解析:
- (1) 累加变量 s 应初始化为 0,选 A。
- (2) 循环条件应为前 20 项,由变量 i 控制(i 从 1 到 20),选 B。
- (3) 需要 double 类型除法,A 语法错误(
double(i)不是 Java 语法),B 是整数除法,C 公式错误,D(double)i/b正确。
难度: ⭐⭐ 考点: #循环累加 #类型转换
💡 学习锦囊
📖 相关公式与知识点:
- 整数除法 vs 浮点除法:
i/b(整数),(double)i/b(浮点)。 - 累加初始化:累加变量 s 应初始化为 0。
易错点
(double)i/b与double(i)/double(b)不同,后者不是 Java 语法。
🔄 举一反三
- 计算 $1 + 1/2 + 1/3 + \dots + 1/100$,写出核心循环语句。
查看练习答案与解析
答案:
double s = 0; for (int i = 1; i <= 100; i++) s += 1.0 / i;解析:注意使用1.0 / i确保浮点除法。
程序 2: 以下程序的功能是输出字符串"Beijing 2008!"包含的小写英文字母个数。
public class Exam22 {
public static void main(String args[]) {
String s = "Beijing 2008!";
int i;
int count = 0;
for (i = 0; i < s.length(); i++) {
(4) ch = s.charAt(i);
if ((5))
count++;
}
System.out.println(count);
}
}2
3
4
5
6
7
8
9
10
11
12
13
【供选择的答案】
(4) A. char B. String C. int D. double
(5) A. ch >= 'a' B. ch >= 'a' && ch <= 'z' C. ch >= 'a' || ch <= 'z' D. ch >= 'a' & ch <= 'z'
查看答案与解析
答案:(4)A (5)B
解析:
- (4)
s.charAt(i)返回 char 类型,变量 ch 应声明为 char,选 A。 - (5) 判断小写字母:
ch >= 'a' && ch <= 'z',选 B。C 用||逻辑错误,D 用&是位运算也可但不如&&规范。
难度: ⭐⭐ 考点: #字符串遍历 #charAt #字符判断
💡 学习锦囊
📖 相关公式与知识点:
- charAt():返回指定索引处的 char 值。
- 小写字母范围:
'a'~'z'。
易错点
- 判断小写字母必须用
&&(与),不能用||(或)。
🔄 举一反三
- 统计字符串 "Hello World 2024!" 中大写字母的个数。
查看练习答案与解析
答案:2(H 和 W) 解析:遍历字符串,判断
ch >= 'A' && ch <= 'Z',满足则计数。
程序 3: 在数组中查找键盘输入的整数。
import java.util.*;
class Exam23 {
public static void main(String[] args) throws IOException {
int (6) = {83, 75, 92, 67, 55, 99, 78, 61};
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int index = -1;
for (int i = 0; (7); i++)
if (a[i] == x) {
index = i;
break;
}
if ((8))
System.out.println("not found");
else
System.out.println(index);
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
【供选择的答案】
(6) A. a[8] B. a[] C. a D. new a[8]
(7) A. a[i] != x B. a[i] == x C. i <= a.length D. i < a.length
(8) A. index != -1 B. a[i] != x C. a[index] == x D. index == -1
查看答案与解析
答案:(6)C (7)D (8)D
解析:
- (6) 数组声明并初始化:
int a[] = {83, 75, ...}或int[] a = {83, 75, ...},选 C(a[]写法在声明时需要类型前缀,此处a配合前面int组成int a[])。 - (7) 循环条件:
i < a.length,选 D。C 的i <= a.length会导致越界。 - (8) 若
index == -1表示未找到,输出 "not found",选 D。
难度: ⭐⭐ 考点: #数组 #数组查找 #length
💡 学习锦囊
📖 相关公式与知识点:
- 数组声明初始化:
int[] a = {...}或int a[] = {...}。 - 数组长度:
a.length(不是a.length())。 - 查找标志:用 -1 表示未找到是常见做法。
易错点
i <= a.length会越界,应该是i < a.length。
🔄 举一反三
- 判断一个整数 x 是否在数组 a 中存在,写出核心循环。
查看练习答案与解析
答案:
boolean found = false; for (int v : a) if (v == x) { found = true; break; }解析:使用增强 for 循环遍历数组,找到则设置标志并退出。
程序 4: 输出 100-1000 之间所有能被 7 整除且 3 个数字中至少有 2 个 8 的三位数。满足条件的数是:588 868 882 889
class Exam24 {
public static void main(String args[]) {
int temp, count;
for (int i = 100; i < 1000; i++) {
if ((9))
continue;
count = 0;
temp = i;
while ((10)) {
if ((11))
count++;
temp = temp / 10;
}
if ((12))
System.out.println(i);
}
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
【供选择的答案】
(9) A. temp > 0 B. count >= 2 C. i % 7 == 0 D. temp % 10 == 8
(10) A. temp > 0 B. count >= 2 C. i % 7 == 0 D. temp % 10 == 8
(11) A. temp > 0 B. count >= 2 C. i % 7 == 0 D. temp % 10 == 8
(12) A. temp > 0 B. count >= 2 C. i % 7 == 0 D. temp % 10 == 8
查看答案与解析
答案:(9)C (10)A (11)D (12)B
解析:
- (9) 首先判断是否能被 7 整除,
i % 7 == 0,不满足则 continue,选 C。 - (10) while 循环逐位检查数字,条件为
temp > 0,选 A。 - (11) 检查当前位是否为 8:
temp % 10 == 8,选 D。 - (12) 至少 2 个 8:
count >= 2,选 B。
难度: ⭐⭐ 考点: #数字位提取 #条件判断 #continue
💡 学习锦囊
📖 相关公式与知识点:
- 数字位提取:
n % 10取个位,n / 10去掉个位,循环操作可逐位提取。 - continue:跳过当前迭代,进入下一次循环。
易错点
- 逐位提取时 while 条件是
temp > 0,不是temp >= 0。
🔄 举一反三
- 判断一个三位数 n 是否包含数字 7,写出条件表达式。
查看练习答案与解析
答案:
n % 10 == 7 || n / 10 % 10 == 7 || n / 100 == 7解析:分别检查个位、十位、百位是否等于 7,用||连接。
三、程序填空题(每空 2 分,共 30 分)
1、若 a 的值为 3 时,下列程序段被执行后,c 的值是 (1)
c = 1;
if (a > 0) {
if (a > 3) c = 2;
else c = 3;
} else c = 4;2
3
4
5
查看答案与解析
答案:3
解析:
a = 3,a > 0为 true → 进入外层 ifa > 3(3 > 3)为 false → 进入 else →c = 3
难度: ⭐ 考点: #if-else #嵌套判断
💡 学习锦囊
📖 相关公式与知识点:
- 嵌套 if-else:外层条件满足后,再判断内层条件。
- else 配对:else 与最近的 if 配对。
易错点
3 > 3为 false,不是 true。
🔄 举一反三
- 若 a = 5,上述程序段执行后 c 的值是多少?
查看练习答案与解析
答案:2 解析:a = 5,
a > 0为 true,a > 3为 true,c = 2。
2、以下程序的运行结果是 (2)
public class Exam32 {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'B': System.out.print("Excellent");
case 'C': System.out.print("OK"); break;
default: System.out.print("Let's talk");
}
}
}2
3
4
5
6
7
8
9
10
查看答案与解析
答案:ExcellentOK
解析: switch 语句中,grade = 'B' 匹配 case 'B',输出 "Excellent"。由于 case 'B' 后没有 break,发生穿透(fall-through),继续执行 case 'C',输出 "OK",然后遇到 break 退出。
难度: ⭐⭐ 考点: #switch穿透 #break
💡 学习锦囊
📖 相关公式与知识点:
- switch 穿透:没有 break 时,执行完当前 case 后会继续执行下一个 case。
- break:跳出 switch 语句。
易错点
- 忘记写 break 会导致穿透,输出多个 case 的内容。
🔄 举一反三
- 若在 case 'B' 后加上
break;,程序输出什么?查看练习答案与解析
答案:Excellent 解析:加上 break 后,匹配 case 'B' 输出 "Excellent" 后直接跳出 switch,不再穿透。
3、以下程序的运行结果是 (3)
public class Exam33 {
public static void main(String args[]) {
try {
System.out.print("try");
} catch (Exception e) {
System.out.print("catch");
} finally {
System.out.print("finally");
}
}
}2
3
4
5
6
7
8
9
10
11
查看答案与解析
答案:tryfinally
解析: try 块中没有异常,输出 "try"。finally 块无论是否异常都会执行,输出 "finally"。catch 块不执行。
难度: ⭐⭐ 考点: #try-catch-finally
💡 学习锦囊
📖 相关公式与知识点:
- finally:无论是否发生异常,finally 块都会执行。
- 执行顺序:try → catch(有异常时)→ finally。
易错点
- finally 块总是会执行,即使 try 中有 return。
🔄 举一反三
- 若 try 块中抛出异常,上述程序输出什么?
查看练习答案与解析
答案:trycatchfinally 解析:try 中输出 "try" 后抛出异常,catch 捕获输出 "catch",finally 输出 "finally"。
4、阅读以下程序,若命令行参数为 "aBc",输出结果是 (4)
class Exam34 {
public static void main(String[] args) {
String s, s1 = "";
char c;
s = args[0];
for (int i = 0; i < s.length(); i++) {
c = s.charAt(i);
if (c >= 'a' && c <= 'z') {
s1 = s1 + Character.toUpperCase(c);
} else {
s1 = s1 + Character.toLowerCase(c);
}
}
System.out.println(s1);
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
查看答案与解析
答案:AbC
解析: 输入 "aBc":
- i=0: c='a',是小写字母 →
toUpperCase→ 'A',s1 = "A" - i=1: c='B',不是小写字母 →
toLowerCase→ 'b',s1 = "Ab" - i=2: c='c',是小写字母 →
toUpperCase→ 'C',s1 = "AbC"
输出 "AbC"。
难度: ⭐⭐ 考点: #字符大小写转换 #Character类
💡 学习锦囊
📖 相关公式与知识点:
- Character.toUpperCase():将字符转换为大写。
- Character.toLowerCase():将字符转换为小写。
易错点
- 注意程序逻辑:小写转大写,非小写(包括大写)转小写。
🔄 举一反三
- 若输入 "HELLO",上述程序输出什么?
查看练习答案与解析
答案:hello 解析:所有字符都不是小写字母,全部转为小写。
5、根据父类与子类间构造方法调用的先后顺序,程序的运行结果是 (5)
class C1 {
C1() { System.out.print("1"); }
}
class C2 extends C1 {
C2() { System.out.print("2"); }
}
class C3 extends C2 {
C3() { System.out.print("3"); }
}
public class Test {
public static void main(String[] args) {
C3 obj = new C3();
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
查看答案与解析
答案:123
解析: 创建子类对象时,构造方法的调用顺序是从父类到子类:
- 先调用 C1 的构造方法 → 输出 "1"
- 再调用 C2 的构造方法 → 输出 "2"
- 最后调用 C3 的构造方法 → 输出 "3"
输出 "123"。
难度: ⭐⭐ 考点: #继承构造顺序
💡 学习锦囊
📖 相关公式与知识点:
- 构造方法调用顺序:从父类到子类,先初始化父类部分,再初始化子类部分。
- super():子类构造方法默认第一行调用
super()(父类无参构造方法)。
易错点
- 构造方法调用顺序是从父类到子类,不是从子类到父类。
🔄 举一反三
- 若 C2 的构造方法中显式调用
super("hello")(假设 C1 有对应构造方法),执行顺序会改变吗?查看练习答案与解析
答案:不会改变 解析:仍然是先调用 C1 的构造方法,再调用 C2 的,最后调用 C3 的。只是 C1 的构造方法变成了带参数的版本。
6、下面程序对数组中每个元素赋值,然后按逆序输出
import java.io.*;
public class Exam36 {
public static void main(String args[]) {
int i;
int a[] = new int[5];
for (i = 0; i < 5; (6)______)
a[i] = i;
for ((7)______; i >= 0; i--)
System.out.println("a[" + i + "]=" + a[i]);
}
}2
3
4
5
6
7
8
9
10
11
查看答案与解析
答案:
- (6)
i++ - (7)
i = 4
解析:
- (6) 循环变量递增:
i++ - (7) 逆序输出从最后一个元素开始:第一个循环结束后 i=5,但逆序应从索引 4 开始,所以
i = 4
难度: ⭐⭐ 考点: #数组逆序 #for循环
💡 学习锦囊
📖 相关公式与知识点:
- 数组逆序输出:从
a.length - 1开始递减到 0。 - 循环变量:注意循环结束后变量的值。
易错点
- 第一个循环结束后 i=5,逆序应从索引 4 开始,不是 5。
🔄 举一反三
- 如何修改第二个循环,使其不需要手动设置
i = 4?查看练习答案与解析
答案:
for (i = a.length - 1; i >= 0; i--)解析:使用a.length - 1作为起始值,更通用。
7、"角谷猜想"程序:输入正整数,若为偶数则除以 2,若为奇数则乘以 3 再加 1。重复运算最终可得 1。运行时输入 12,则输出为:12 6 3 10 5 16 8 4 2 1
import java.util.Scanner;
public class Exam37 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.print(num + " ");
while (num != 1) {
if (num % 2 == 0)
num = num / 2;
else
num = num * 3 + 1;
System.out.print(num + " ");
}
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
查看答案与解析
答案: 程序功能正确,输入 12 输出 12 6 3 10 5 16 8 4 2 1。
解析: 角谷猜想(Collatz 猜想):
- 偶数:除以 2
- 奇数:乘以 3 加 1
- 重复直到结果为 1
以输入 12 为例:
- 12(偶) → 6 → 3(奇) → 10 → 5(奇) → 16 → 8 → 4 → 2 → 1
难度: ⭐⭐ 考点: #角谷猜想 #while循环 #条件判断
💡 学习锦囊
📖 相关公式与知识点:
- 角谷猜想:对任意正整数,反复进行偶数除 2、奇数乘 3 加 1 的操作,最终都会得到 1。
- while 循环:条件为
num != 1,直到 num 变为 1 时退出。
易错点
- 注意奇数的操作是
num * 3 + 1,不是num * 3 - 1。
🔄 举一反三
- 若输入 7,写出角谷猜想的输出序列。
查看练习答案与解析
答案:7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 解析:7(奇)→22→11(奇)→34→17(奇)→52→26→13(奇)→40→20→10→5(奇)→16→8→4→2→1